We are given two arrays A
and B
of words. Each word is a string of lowercase letters.
Now, say that word b
is a subset of word a
if every letter in b
occurs in a
, including multiplicity. For example, "wrr"
is a subset of "warrior"
, but is not a subset of "world"
.
Now say a word a
from A
is universal if for every b
in B
, b
is a subset of a
.
Return a list of all universal words in A
. You can return the words in any order.
Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["e","o"] Output: ["facebook","google","leetcode"]
Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["l","e"] Output: ["apple","google","leetcode"]
Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["e","oo"] Output: ["facebook","google"]
Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["lo","eo"] Output: ["google","leetcode"]
Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["ec","oc","ceo"] Output: ["facebook","leetcode"]
1 <= A.length, B.length <= 10000
1 <= A[i].length, B[i].length <= 10
A[i]
andB[i]
consist only of lowercase letters.- All words in
A[i]
are unique: there isn'ti != j
withA[i] == A[j]
.
# @param {String[]} a# @param {String[]} b# @return {String[]}defword_subsets(a,b)count=[0] * 26b.eachdo |sub| count_=count_chars(sub)(0...26).eachdo |i| count[i]=[count[i],count_[i]].maxendenda.filter{ |word| count_chars(word).zip(count).all?{ |c| c[0] >= c[1]}}end# @param {String} s# @return {Integer[]}defcount_chars(s)count=[0] * 26s.each_byte{ |c| count[c - 97] += 1}countend
implSolution{pubfnword_subsets(a:Vec<String>,b:Vec<String>) -> Vec<String>{letmut count = [0;26];for sub in b {let count_ = Self::count_chars(&sub);for i in0..26{ count[i] = count[i].max(count_[i]);}} a.into_iter().filter(|word| {Self::count_chars(&word).iter().zip(count.iter()).all(|(x, y)| x >= y)}).collect()}fncount_chars(s:&str) -> [i32;26]{letmut count = [0;26];for c in s.bytes(){ count[(c - b'a')asusize] += 1;} count }}